package Prac;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class P11_21 {
    //杨辉三角
    public List<List<Integer>> generate(int numRows) {
        List<List<Integer>> result = new ArrayList<>();
        //第一行,只有1
        List<Integer> fir = Arrays.asList(1);
        result.add(fir);
        if(numRows==1){
            return result;
        }
        List<Integer> sec = Arrays.asList(1,1);
        result.add(sec);
        if(numRows==2){
            return result;
        }
        //走到这numRows>2
        //i是行号不是索引
        for (int i = 3; i <=numRows ; i++) {
            //第i行有i个元素
            List<Integer> cur = new ArrayList<>(i);
            //第一个元素是1
            cur.add(1);
            //从第二个元素开始,到倒数第二个元素
            //nums[i][j]=nums[i-1][j-1]+nums[i-1][j];i-1是前一行,j和j-1是第几个元素
            for (int j = 2; j <i ; j++) {//j<i不是j<numRows;内循环是放第i行的中间的元素
                //取出前一行的下标:i-1-1(i-1是前一行的行号,再-1就是下标,因为行号和下标有一个单位偏移量)
                List<Integer> prev = result.get(i-1-1);
                //nums[i][j]=nums[i-1][j-1]+nums[i-1][j];i-1是前一行,j和j-1是第几个元素
                int tmp = prev.get(j-1-1) + prev.get(j-1);//j和j-1是第几个元素再-1就是下标
                //将中间的元素放进去
                cur.add(tmp);
            }
            //最后一个元素是1
            cur.add(1);
            result.add(cur);
        }
        return result;
    }
}
